#ifndef __GDL_TYPES_H__
#define __GDL_TYPES_H__

#include <stdbool.h>
#include "gdl_macros.h"

GDL_BEGIN_DECLS

typedef void* gdl_any_pointer;

typedef const void* gdl_const_any_pointer;

typedef int (*GDL_Compare_Func)(gdl_const_any_pointer a, gdl_const_any_pointer b);

typedef int (*GDL_Compare_Data_Func)(gdl_const_any_pointer a, 
				     gdl_const_any_pointer b,
				     gdl_any_pointer user_data);

typedef bool (*GDL_Equal_Func)(gdl_const_any_pointer a, gdl_const_any_pointer b);

typedef void (*GDL_Destroy_Notify)(gdl_any_pointer data);

typedef void (*GDL_Func)(gdl_any_pointer data, gdl_any_pointer user_data);

typedef unsigned (*GDL_Hash_Func)(gdl_const_any_pointer key);

typedef void (*GDL_H_Func)(gdl_any_pointer key, gdl_any_pointer value, gdl_any_pointer user_data);

typedef void (*GDL_Free_Func)(gdl_any_pointer data);

typedef const char* (*GDL_Translate_Func)(const char *str, gdl_any_pointer data);

GDL_END_DECLS

#endif //end of __GDL_TYPES_H__ define 
